home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # Install modified versions of certain ANSI-incompatible system header files
- # which are fixed to work correctly with ANSI C
- # and placed in a directory that GNU C will search.
- # This works properly on a Sun in system version 3.4;
- # for other versions, you had better check.
-
- # Directory in which to store the results.
- LIB=${LIB-/usr/local/lib/gcc-include}
-
- # Make sure it exists.
- mkdir $LIB > /dev/null 2>&1
-
- # Determine whether this system has symbolic links.
- if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
- rm -f $LIB/ShouldNotExist
- LINKS=true
- else
- LINKS=false
- fi
-
- echo 'Making directories:'
- cd /usr/include
- if $LINKS; then
- files=`ls -LR | sed -n s/:$//p`
- else
- files=`find . -type d -print`
- fi
- for file in $files; do
- mkdir $LIB/$file > /dev/null 2>&1
- done
-
- # treetops gets an alternating list
- # of old directories to copy
- # and the new directories to copy to.
- treetops="/usr/include ${LIB}"
-
- if $LINKS; then
- echo 'Making internal symbolic directory links'
- for file in $files; do
- dest=`ls -ld $file | sed -n 's/.*-> //p'`
- if [ "$dest" ]; then
- if expr $dest : '[^/.].*' > /dev/null; then
- rmdir ${LIB}/$file > /dev/null 2>&1
- rm -f ${LIB}/$file > /dev/null 2>&1
- ln -s $dest ${LIB}/$file > /dev/null 2>&1
- else # dont make links outside /usr/include
- treetops="$treetops $dest ${LIB}/$file"
- fi
- fi
- done
- fi
-
- set - $treetops
- while [ $# != 0 ]; do
- # $1 is an old directory to copy, and $2 is the new directory to copy to.
- echo "Finding header files in $1:"
- cd /usr/include
- cd $1
- files=`find . -type f -print`
- echo 'Checking header files:'
- for file in $files; do
- if egrep '[ ]_IO[A-Z]*\(|#define._IO|CTRL' $file > /dev/null; then
- echo Fixing $file
- if [ -r $file ]; then
- cp $file $2/$file >/dev/null 2>&1 \
- || echo "Can't copy $file"
- chmod +w $2/$file
- sed -e '
- :loop
- /\\$/ N
- /\\$/ b loop
- /[ ]_IO[A-Z]*(/ s/(\(.\),/('\''\1'\'',/
- /#define._IO/ s/'\''x'\''/x/g
- /[^A-Z]CTRL[ ]*(/ s/\(.\))/'\''\1'\'')/
- /#define.CTRL/ s/'\''c'\''/c/g
- ' $2/$file > $2/$file.sed
- mv $2/$file.sed $2/$file
- if cmp $file $2/$file >/dev/null 2>&1; then
- echo Deleting $2/$file\; no fixes were needed.
- rm $2/$file
- fi
- fi
- fi
- done
- shift; shift
- done
-
- cd /usr/include
-
- # Fix one other error in this file: a mismatched quote not inside a C comment.
- file=sundev/vuid_event.h
- if [ -r $file ]; then
- if [ ! -r ${LIB}/$file ]; then
- cp $file ${LIB}/$file >/dev/null 2>&1 \
- || echo "Can't copy $file"
- chmod +w ${LIB}/$file
- fi
- fi
-
- if [ -r ${LIB}/sundev/vuid_event.h ]; then
- echo Fixing sundev/vuid_event.h comment
- ex ${LIB}/sundev/vuid_event.h <<EOF
- g/doesn't/s/doesn't/does not/
- wq
- EOF
- fi
-
- # Deal with yet another challenge, this in X11/Xmu.h
- file=X11/Xmu.h
- if [ -r $file ]; then
- if [ ! -r ${LIB}/$file ]; then
- mkdir ${LIB}/X11 2>&-
- cp $file ${LIB}/$file >/dev/null 2>&1 \
- || echo "Can't copy $file"
- chmod +w ${LIB}/$file
- fi
- fi
-
- if [ -r ${LIB}/$file ]; then
- echo Fixing $file sprintf declaration
- ex ${LIB}/$file <<EOF
- /^extern char \* sprintf();$/c
- #ifndef __STDC__
- extern char * sprintf();
- #endif /* !defined __STDC__ */
- .
- wq
- EOF
- fi
-
- echo 'Removing unneeded directories:'
- cd $LIB
- files=`find . -type d -print | sort -r`
- for file in $files; do
- rmdir $LIB/$file > /dev/null 2>&1
- done
-
- if $LINKS; then
- echo 'Making internal symbolic non-directory links'
- cd /usr/include
- files=`find . -type l -print`
- for file in $files; do
- dest=`ls -ld $file | sed -n 's/.*-> //p'`
- if expr "$dest" : '[^/].*' > /dev/null; then
- target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
- if [ -f $target ]; then
- ln -s $dest ${LIB}/$file >/dev/null 2>&1
- fi
- fi
- done
- fi
-
- exit 0
-